package com.example.behaviorpattern.iterator;

import com.example.behaviorpattern.iterator.impl.ConcreteAggregate;

/**
 * 迭代器模式是一种行为设计模式，它提供一种方法顺序访问聚合对象（如集合）内部的元素，而不需要暴露其底层表示。
 * 迭代器模式可以分离集合对象的遍历行为，把责任委托给迭代器对象。
 * 迭代器模式适用于以下场景：
 * 当想要访问一个聚合对象的内容而无需暴露它的内部表示时。
 * 当需要为聚合对象提供多种遍历方式时。
 * 当你需要一个统一的接口进行聚合对象的遍历时。
 * 使用迭代器模式需要以下组件：
 * Iterator：迭代器接口，定义了遍历集合所需的操作，如获取下一个元素、判断是否还有下一个元素等。
 * ConcreteIterator：Iterator接口的具体实现，实现迭代的具体逻辑。
 * Aggregate：聚合接口，定义了创建相应迭代器对象的接口。
 * ConcreteAggregate：Aggregate接口的具体实现，返回一个适当的ConcreteIterator实例。
 *
 * @author yaojianfeng
 */
public class IteratorTest {
    public static void main(String[] args) {
        ConcreteAggregate aggregate = new ConcreteAggregate(10);
        for (int i = 0; i < aggregate.getItems().length; i++) {
            aggregate.add(i);
        }

        Iterator iterator = aggregate.createIterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}
